home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / redakcyjne / programy / PSPad editor 4.5.4 build 2356 beta / pspad454inst_en.exe / {app} / Script / VBScript / Align Column.vbs next >
Text File  |  2006-03-12  |  3KB  |  114 lines

  1. 'Author: gogogadgetscott
  2. 'Published: 12-30-2005 21:41
  3. Const module_name  = "Align"
  4. Const module_ver   = "2.00"   
  5.  
  6. Sub AlignCol
  7.     Dim Columns(100)
  8.     
  9.     '// Get delimiter
  10.     delimiter = InputBox("Enter delimiter.", module_name, ",")
  11.     If delimiter = "" Then Exit Sub
  12.     
  13.     '// Get working text
  14.     text = handleSelText("")
  15.  
  16.     '// Determine end-of-line
  17.     EOL = ""
  18.     If InStr(text, Chr(13)) Then
  19.         EOL = EOL & Chr(13)
  20.     End If
  21.     If InStr(text, Chr(10)) Then
  22.         EOL = EOL & Chr(10)
  23.     End If
  24.  
  25.     '// Get lines
  26.     lines = Split(text, EOL)
  27.     
  28.     '// Make delimiter regexp safe
  29.     Set regReplace = New RegExp
  30.     With regReplace
  31.         .Global     = True
  32.         .IgnoreCase = True
  33.         .Pattern    = "([\$|\(|\)|\*|\+|\.|\[|\]|\?|\\|\^|\{|\}|\|])"
  34.     End With
  35.     safeDelimiter = regReplace.Replace(delimiter, "\$1")
  36.     
  37.     '// Setup regexp object
  38.     Set regSearch = New RegExp
  39.     With regSearch
  40.         .Global     = True
  41.         .IgnoreCase = True
  42.         .Pattern    = "([^" & safeDelimiter & "]*)(\s*)" & safeDelimiter
  43.     End With
  44.  
  45.     '// Get all column's max width
  46.     For Each line in lines
  47.         Set Matches = regSearch.Execute(line)
  48.         '// Initialize column index
  49.         Column = 0
  50.         For Each Match in Matches
  51.             length = len(Match.SubMatches(0))
  52.             If length > Columns(Column) Then
  53.                 Columns(Column) = length
  54.             End If 
  55.             Column = Column + 1
  56.         Next
  57.     Next
  58.     
  59.     '// Initialize line index
  60.     i = -1
  61.     
  62.     '// Added spacing
  63.     For Each line in lines 
  64.         Column = 0
  65.         newLine = ""
  66.         i = i + 1
  67.         Set Matches = regSearch.Execute(line)
  68.         
  69.         '// Sum matches and remove from orignal line
  70.         '// Match should catch everything before delimiter
  71.         foundText = ""
  72.         For Each Match in Matches
  73.             foundText = foundText & Match.SubMatches(0) & Match.SubMatches(1) & delimiter
  74.         Next
  75.         extraText = Replace(line, foundText, "")
  76.  
  77.         For Each Match in Matches
  78.             Spaces  = Columns(Column) - Len(Match.SubMatches(0))
  79.             newLine = newLine & Match.SubMatches(0) & String(Spaces, " ") & delimiter
  80.             Column  = Column + 1
  81.         Next
  82.         If newLine <> "" Then
  83.             lines(i) = newLine & extraText
  84.         End If
  85.     Next
  86.     
  87.     '// Replace text
  88.     text = Join(lines, EOL)
  89.     handleSelText text
  90. End Sub
  91.  
  92. '// @param string Text to replace selected text
  93. Private Function handleSelText(text)
  94.     On Error Resume Next
  95.     Set editor = newEditor()
  96.     editor.assignActiveEditor
  97.     If text = "" Then
  98.         '// Get selected text
  99.         handleSelText = editor.selText
  100.         If handleSelText = "" Then
  101.             '// No text was select. Get all text and select it.
  102.             handleSelText  = editor.Text
  103.             editor.command "ecSelectAll"
  104.         End If
  105.     Else
  106.         '// Set selected text
  107.         editor.selText text
  108.     End If
  109. End Function
  110.  
  111. Sub Init
  112.     addMenuItem "Align columns", "Format code", "AlignCol"
  113. End Sub
  114.